#进程
#进程的状态
#就绪状态 运行条件都以满足,等待cpu执行
#执行状态 cpu正在执行
#等待(阻塞)状态 等待某些条件满足,比如time.sleep()
#进程语法结构
#multiprocessing模块提供Process类 代表进程对象
#Process类参数 target 执行任务名  args 以元组形式给任务传参  kwargs 以字典形式为任务传参
#方法 start()开启子进程 is_alive()判断子进程是否还活着 Ture活 False死 join()主进程等待子进程结束
#属性 name进程名字 pid当前进程编号
#os.getpid() 获取当前进程编号 os.getppid() 获取当前父进程编号
#导入模块
from multiprocessing import Process
import time
def a(x):
    time.sleep(1)
    print("A1"+x)
    time.sleep(1)
    print("A2"+x)
def b(x):
    time.sleep(1)
    print("B1"+x)
    time.sleep(1)
    print("B2"+x)
    #防止别人导入文件时,执行main里的方法
    #防止windows系统递归创建子进程
if __name__ == '__main__':
    p1 = Process(target=a,args=("进程1",))
    p2 = Process(target=b,args=("进程2",))
    p1.start()
    p2.start()
#进程间不共享全局变量
#进程通信
#使用Q队列 q.put()放入数据 q.get()取出数据 q.empty()判断队列是否为空 q.qsize()返回当前队列包含的消息数量 q.full()判断队列是否满了
#导入模块
    from queue import Queue
    q = Queue(3) #可以接收3条消息,没写或负值代表无上限
    q.put("第一条消息")
    q.put("第二条消息")
    q.put("第三条消息")
    print(q.get()) #取出数据后,在队列中消除这条数据
    print(q.get())
    print(q.get())
    #通过将q对象放入方法的参数中,实现方法的传值
